package com.xinz.server.socket;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.frame.FrameDecoder;

import com.xinz.srmi.Buffer;


public class SpotProtocalDecoder extends FrameDecoder {
	
//
//	@Override
//	protected boolean doDecode(IoSession session, IoBuffer in,
//			ProtocolDecoderOutput out) throws Exception {
//		//消息buf
////        IoBuffer buf = IoBuffer.allocate(ServerConfig.MessageMaxByte);   //ServerConfig.MessageMaxByte 最大消息字节数
////        buf.order(ServerConfig.ByteEndian);
//        
//        //考虑以下几种情况：
//        //    1. 一个ip包中只包含一个完整消息
//        //    2. 一个ip包中包含一个完整消息和另一个消息的一部分
//        //    3. 一个ip包中包含一个消息的一部分
//        //    4. 一个ip包中包含两个完整的数据消息或更多（循环处理在父类的decode中）
//        if (in.remaining() >= 2) {
//            int length = in.getShort(in.position());
////           int type = in.getShort(in.position()+2);
//            if (length > in.remaining()) return false;
//            in.getShort();
//            int type = in.get();
//            byte buffData[] = new byte[length-3];
//            in.get(buffData);
//            out.write(new Buffer(buffData,type));
//            return true;
//        } else {
//            return false;
//        }
//	}

	@Override
	protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
		if(buffer.readableBytes() >= 2){
			buffer.markReaderIndex();
			int length = buffer.readShort();
			if(length - 2 > buffer.readableBytes()){
				buffer.resetReaderIndex();
				return null;
			}
			int type = buffer.readByte();
			byte buffData[] = new byte[length - 3];
			buffer.readBytes(buffData);
			return new Buffer(buffData, type);
		}
		return null;
	}
	
}
